﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace IntoStationSystem.ConvertHepler
{
    public static class ConvertHelper
    {
        public static DataTable ToDataTable<T>(this IEnumerable<T> items)
        {
            // 创建一个新的DataTable
            var table = new DataTable(typeof(T).Name);

            // 获取类型T的所有公共属性
            PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);

            // 为每个属性添加一列到DataTable
            foreach (PropertyInfo prop in props)
            {
                // 添加列，名称为属性名，类型为属性类型
                Type columnType = Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType;
                table.Columns.Add(prop.Name, columnType);
            }

            // 对于集合中的每一项，向DataTable添加一行
            foreach (var item in items)
            {
                var row = table.NewRow();
                foreach (PropertyInfo prop in props)
                {
                    // 设置行中每个单元格的值
                    row[prop.Name] = prop.GetValue(item, null) ?? DBNull.Value;
                }
                table.Rows.Add(row);
            }

            return table;
        }
    }
}
